﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using VINETLIFE.BL;
using VINETLIFE.DO;
using System.Data.OleDb;
using System.IO;
using System.Configuration;
using System.Data.SqlClient;

namespace VINETLIFE.AdminCP
{
    public partial class UploadProducts : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string FileName = "product_upload.xlsx";
            string SaveLocation = string.Format("{0}\\{1}", Server.MapPath("~/Media/"), FileName);
            if (File.Exists(SaveLocation))
            {
                File.Delete(SaveLocation);
            }
        }

        protected void btnUpload_Click(object sender, EventArgs e)
        {
            //Xâu Kiểm tra xem có đúng là file excel không...   
            string exelContentType = "application/vnd.ms-excel";
            string exel2010ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            // Tên file
            string FileName = "product_upload.xlsx";
            // Có file không?
            if (!fileUpload.HasFile)
            {
                lblError.Text = "Vui lòng chọn file";
            }
            else
            {
                try
                {
                    // Kiểm tra định dạng file excel???
                    if (fileUpload.PostedFile.ContentType != exelContentType && fileUpload.PostedFile.ContentType != exel2010ContentType)
                    {
                        lblError.Text = "Vui lòng chọn tệp tin excel!";
                    }
                    else
                    {
                        // Lưu file
                        string SaveLocation = string.Format("{0}\\{1}", Server.MapPath("~/Media/"), FileName);
                        if (File.Exists(SaveLocation))
                        {
                            File.Delete(SaveLocation);
                        }
                        fileUpload.SaveAs(SaveLocation);
                        lblError.Text = "Tải lên thành công";
                        // Mở kết nối tới file excel
                        string excelConnectionString =string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0",SaveLocation);
                        OleDbConnection connection = new OleDbConnection();
                        connection.ConnectionString = excelConnectionString;
                        // Câu lệnh lấy các dòng dữ liệu từ [Sheet1], muốn lấy từ sheet2 thì thay thế "Sheet1$" => "Sheet2$"
                        string sqlString = string.Format("SELECT [MaSanPham],[TenSanPham],[MaDanhMucSanPham],[MoTa],[MoTaChiTiet],[SoThuTu],[DonGia] FROM [{0}]","Sheet1$");
                        OleDbCommand command = new OleDbCommand(sqlString,connection);
                        connection.Open();
                        // Các hàm gọi dữ liệu
                        OleDbDataReader odr = command.ExecuteReader();
                        cmsProductDO objProduct = new cmsProductDO();
                        cmsProductBL productBL = new cmsProductBL();
                        // Đọc cho tới hết
                        while (odr.Read())
                        {
                            objProduct.ProductCode = validToString(odr, 0); // Hàm này kiểm tra giá trị trong excel -> nếu null thì trả về xâu rỗng
                            objProduct.ProductTitle = validToString(odr, 1);
                            objProduct.ProductCategoryCode = validToString(odr, 2);
                            objProduct.Description = validToString(odr, 3);
                            objProduct.DetailDescription = validToString(odr, 4);
                            objProduct.OrderID = int.Parse(valid(odr, 5));// Hàm này kiểm tra giá trị trong excel -> nếu null thì trả về 0
                            objProduct.Price = long.Parse(valid(odr,6));
                            //Gọi hàm Update lại dữ liệu mới hoặc Insert bản ghi mới
                            productBL.UpdateOrInsertByProductCode(objProduct);
                        }
                        ///Update thuộc tính
                        // Câu lệnh lấy các dòng dữ liệu từ [Sheet1], muốn lấy từ sheet2 thì thay thế "Sheet1$" => "Sheet2$"
                        sqlString = string.Format("SELECT [MaSanPham],[MaThuocTinh],[GiaTri] FROM [{0}]", "Sheet2$");
                        command = new OleDbCommand(sqlString, connection);
                        // Các hàm gọi dữ liệu
                        odr = command.ExecuteReader();
                        string productCode = "";
                        string propertyCode = "";
                        string value = "";
                        cmsProductPropertyBL productProperty = new cmsProductPropertyBL();
                        // Đọc cho tới hết
                        while (odr.Read())
                        {
                            productCode = validToString(odr, 0); // Hàm này kiểm tra giá trị trong excel -> nếu null thì trả về xâu rỗng
                            propertyCode = validToString(odr, 1);
                            value = validToString(odr, 2);
                            productProperty.UpdateOrInsertExcel(productCode, propertyCode, value);
                            //Gọi hàm Update lại dữ liệu mới hoặc Insert bản ghi mới
                            //productBL.UpdateOrInsertByProductCode(objProduct);
                        }
                        connection.Close();


                        Functions.Alert("Dữ liệu đã được đưa lên thành công!", "ListProduct.aspx");
                    }
                }
                catch 
                {
                    lblError.Text = "Có lỗi xảy ra trong quá trình import dữ liệu! Vui lòng thực hiện lại!";
                }
               
            }
        }
        
        protected string valid(OleDbDataReader myreader, int stval)//if any columns are 
        //found null then they are replaced by zero
        {
            object val = myreader[stval];
            if (val != DBNull.Value)
                return val.ToString();
            else
                return Convert.ToString(0);
        }
        protected string validToString(OleDbDataReader myreader, int stval)//if any columns are 
        //found null then they are replaced by zero
        {
            object val = myreader[stval];
            if (val != DBNull.Value)
                return val.ToString();
            else
                return "";
        }
    }
}